/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package controle;

import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import modelo.AtuacaoDAO;

/**
 *
 * @author 
 */
public class Atuacao extends javax.swing.JFrame {

    /**
     * Creates new form Atua
     */
    public Atuacao() {
        initComponents();
        jtbConsultaModel =  (DefaultTableModel) jtbConsulta4.getModel();


    }
    
    private void excluirLinhasNaTabela(){
        int qdeDeLinhas = jtbConsultaModel.getRowCount(); //a quantidade de linhas deve ser obtida antes de removê-las
        for (int cont=0; cont < qdeDeLinhas; cont++){ //sempre utilize a técnica de controle por contador e utilize como limite a quantidade de linhas presente na tabela (antes da remoção) 
            jtbConsultaModel.removeRow(0); //sempre remova a linha ZERO
    
        }
      }
         private void incluirLinhasNaTabela(ArrayList<Atuacao> atua){
        Object[] linha = new Object[5]; //cria um array de objetos com o tamanho da quantidade de campos (colunas) da tabela
        for(int c=0; c < atua.size(); c++){
            jtbConsultaModel.addRow(linha); //adiciona linhas na tabela até o tamanho do arrayList (que contém os dados de uma consulta do tipo listar)
        }
    }
          private void preencherTabela(ArrayList<Atuacao> atuacoes){
        //adiciona os valores da consulta nas linhas da tabela
        int row = 0;        
                 
        for (Atuacao atuacao : atuacoes) { //usa um for-each para percorrer o arrayList e alimentar a camada de modelo da JTable 
            jtbConsulta4.setValueAt(atuacao.getPapel(), row, 0);
            jtbConsulta4.setValueAt(atuacao.getCod_atuacao(), row, 1);
            jtbConsulta4.setValueAt(atuacao.getCod_filme(), row, 2);
            jtbConsulta4.setValueAt(atuacao.getCod_ator(), row, 3);
           
           
            row++;
        }  
    }
    
    public void limparCampos(){
    
    jfPapel.setText("");
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jlIdAtua = new javax.swing.JLabel();
        jlPapel = new javax.swing.JLabel();
        jlFilme = new javax.swing.JLabel();
        jlIdAtor = new javax.swing.JLabel();
        jfIdAtor = new javax.swing.JTextField();
        jfIdFilme = new javax.swing.JTextField();
        jfPapel = new javax.swing.JTextField();
        jfIdAtuacao = new javax.swing.JTextField();
        jScrollPane5 = new javax.swing.JScrollPane();
        jtbConsulta4 = new javax.swing.JTable();
        jbConsulta = new javax.swing.JButton();
        jbCadastrar = new javax.swing.JButton();
        jbAlterar = new javax.swing.JButton();
        jbExcluir = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jlIdAtua.setFont(new java.awt.Font("Comic Sans MS", 1, 14)); // NOI18N
        jlIdAtua.setText("Id atuação:");

        jlPapel.setFont(new java.awt.Font("Comic Sans MS", 1, 14)); // NOI18N
        jlPapel.setText("Papel:");

        jlFilme.setFont(new java.awt.Font("Comic Sans MS", 1, 14)); // NOI18N
        jlFilme.setText("Id filme:");

        jlIdAtor.setFont(new java.awt.Font("Comic Sans MS", 1, 14)); // NOI18N
        jlIdAtor.setText("Id ator:");

        jfIdAtor.setEditable(false);

        jfIdFilme.setEditable(false);

        jfIdAtuacao.setEditable(false);

        jScrollPane5.setBorder(javax.swing.BorderFactory.createTitledBorder("Lista de Contatos"));

        jtbConsulta4.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Papel", "Id da Atuação", "Id do Filme", "Id do Ator"
            }
        ));
        jtbConsulta4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jtbConsulta4MouseReleased(evt);
            }
        });
        jScrollPane5.setViewportView(jtbConsulta4);

        jbConsulta.setText("Consultar");
        jbConsulta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbConsultaActionPerformed(evt);
            }
        });

        jbCadastrar.setText("Cadastrar");
        jbCadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbCadastrarActionPerformed(evt);
            }
        });

        jbAlterar.setText("Alterar");
        jbAlterar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbAlterarActionPerformed(evt);
            }
        });

        jbExcluir.setText("Excuir");
        jbExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbExcluirActionPerformed(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Comic Sans MS", 1, 18)); // NOI18N
        jLabel1.setText("Atuação");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 633, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(148, 148, 148)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(jlIdAtua)
                                    .addComponent(jlPapel, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jlFilme, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jlIdAtor, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jfIdFilme, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jfIdAtor, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jfIdAtuacao, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jfPapel, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(14, 14, 14)
                                .addComponent(jbConsulta)
                                .addGap(34, 34, 34)
                                .addComponent(jbAlterar)
                                .addGap(35, 35, 35)
                                .addComponent(jbExcluir))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(51, 51, 51)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jbCadastrar)
                            .addComponent(jLabel1))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(21, 21, 21)
                .addComponent(jLabel1)
                .addGap(32, 32, 32)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jfPapel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jlPapel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jfIdAtuacao, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jlIdAtua, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jlFilme, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jfIdFilme, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(5, 5, 5)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jfIdAtor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jlIdAtor, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 36, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jbConsulta)
                    .addComponent(jbAlterar)
                    .addComponent(jbCadastrar)
                    .addComponent(jbExcluir))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 216, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jbExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbExcluirActionPerformed
        // TODO add your handling code here:
        if(JOptionPane.showConfirmDialog(rootPane, "Você tem certeza que deseja excluir este produto?")==0){
            int selecionada = jtbConsulta4.getSelectedRow();//obtem a linha selecionada
            int cod_atuacao = Integer.parseInt(jtbConsulta4.getValueAt(selecionada, 1).toString());//obtem o valor do id
            atuacao_dao.excluir(cod_atuacao);//exclui por id
            excluirLinhasNaTabela(); //excluir linhas na tabela atual
        }
        limparCampos();
    }//GEN-LAST:event_jbExcluirActionPerformed

    /**Este botão altera a atuacão*/
    private void jbAlterarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbAlterarActionPerformed
        // TODO add your handling code here:
        if(jfPapel.getText().isEmpty()){
            JOptionPane.showMessageDialog(rootPane, "Preencha todos os campos do formulário para alterar.");
        }
        else{
            int a = JOptionPane.showConfirmDialog(rootPane, "Você tem certeza que quer alterar o contato?");
            if(a == JOptionPane.YES_OPTION) {
                atuacao = new Atuacao();
                atuacao.setCod_atuacao(Integer.parseInt(jfIdAtuacao.getText()));
                atuacao.setPapel(jfPapel.getText());
                atuacao_dao.alterar(atuacao);
                limparCampos();
                ArrayList<Atuacao> atuacoes = atuacao_dao.listar(); //faz uma nova listagem (para garantir a ordem dos registros exibidos na JTable)
                //atualiza a tabela
                //preencher a tabela, inclui:
                excluirLinhasNaTabela(); //excluir linhas na tabela atual
                incluirLinhasNaTabela(atuacoes); //incluir linhas na tabela para que elas possam receber os dados da consulta atual
                preencherTabela(atuacoes); //colocar os valores nas linhas
            }
        }
    }//GEN-LAST:event_jbAlterarActionPerformed

    private void jbCadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbCadastrarActionPerformed
        // TODO add your handling code here:
        atuacao.setPapel(jfPapel.getText());
        atuacao_dao.inserir(atuacao);

    }//GEN-LAST:event_jbCadastrarActionPerformed

    private void jbConsultaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbConsultaActionPerformed
        // TODO add your handling code here:
        if( jfPapel.getText().isEmpty() ){ //se o campo está vazio
            JOptionPane.showMessageDialog(rootPane, "Nome inválido!");
        }
        else{
            ArrayList<modelo.Atuacao> atuacoes  = atuacao_dao.consultar(jfPapel.getText());
            if(atuacoes.isEmpty()){ //se há registros no banco de dados para a chave consultada
                JOptionPane.showMessageDialog(rootPane, "O contato não está cadastrado.");
            }
            else{
                //preencher a tabela, inclui:
                excluirLinhasNaTabela(); //excluir linhas na tabela atual
                incluirLinhasNaTabela(atuacoes); //incluir linhas na tabela para que elas possam receber os dados da consulta atual
                preencherTabela(atuacoes); //colocar os valores nas linhas
            }
        }
    }//GEN-LAST:event_jbConsultaActionPerformed

    private void jtbConsulta4MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jtbConsulta4MouseReleased
        // TODO add your handling code here:
        int linhaSelecionada = jtbConsulta4.getSelectedRow(); //retorna um inteiro
        int coluna = jtbConsulta4.getSelectedColumn();//obtem a coluna

        jfPapel.setText(jtbConsulta4.getValueAt(linhaSelecionada, 0).toString());
        jfIdAtuacao.setText(jtbConsulta4.getValueAt(linhaSelecionada, 1).toString());

    }//GEN-LAST:event_jtbConsulta4MouseReleased
/**Este botão irá excluir a atuacao cadastrada*/
 
    
     
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Atuacao.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Atuacao.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Atuacao.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Atuacao.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Atuacao().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane5;
    private javax.swing.JButton jbAlterar;
    private javax.swing.JButton jbCadastrar;
    private javax.swing.JButton jbConsulta;
    private javax.swing.JButton jbExcluir;
    private javax.swing.JTextField jfIdAtor;
    private javax.swing.JTextField jfIdAtuacao;
    private javax.swing.JTextField jfIdFilme;
    private javax.swing.JTextField jfPapel;
    private javax.swing.JLabel jlFilme;
    private javax.swing.JLabel jlIdAtor;
    private javax.swing.JLabel jlIdAtua;
    private javax.swing.JLabel jlPapel;
    private javax.swing.JTable jtbConsulta4;
    // End of variables declaration//GEN-END:variables
  Atuacao atuacao = new Atuacao();
  AtuacaoDAO atuacao_dao = new AtuacaoDAO();
  DefaultTableModel jtbConsultaModel;
}
